t-field
/t-ecs
/t-out
的使用
在製作報表時,我們最常用的就是t-field
、t-ecs
、t-out
,他們各別有自己的特性,我們先來看看範例:
<template id='libaray_report'>
<t t-call ='web.html_container'>
<t t-foreach='library_book' t-as='doc'>
<t t-call='external_layout'>
<div class='page'>
<t t-field = ' book.name'/>
<t t-ecs = ' book.name'/>
<t t-out = "book.name + ' by ' + book.author"/>
</div>
</t>
</t>
</t>
</template>
t-field
直接將,model中指定的欄位值取出t-ecs
會將model中的值取出,並轉成html格式後顯示t-out
通常使用在條件輸出或運算上,也跟t-ecs
一樣會轉譯值為html另位t-ecs
也可以提供輸出值為True
或 False
:
<template id='libaray_report'>
<t t-call ='web.html_container'>
<t t-foreach='library_book' t-as='doc'>
<t t-call='external_layout'>
<div class='page'>
<t t-foreach ="doc.book_id.book_list" t-as ='rct'>
<h1 t-ecs=' rct.name '/>
Sequence of foreach loop :-<span t-ecs ='rct_index'/>
Is this first index? <span t-ecs ='rct_first'/>
Is this last index? <span t-ecs = 'rct_last'/>
</t>
</div>
</t>
</t>
</t>
</template>
<p t-ecs = 'rct_value'/>
判斷是否有值<p t-ecs = 'rct_parity'/>
判斷是否為二進制<p t-ecs = 'rct_even' />
判斷是否為偶數<p t-ecs = 'rct_odd' />
判斷是否為奇數<span t-ecs ='rct_index'/>
輸出當前loop的索引<span t-ecs ='rct_first'/>
檢查是否為loop中第一個索引<span t-ecs = 'rct_last'/>
檢查是否為loop中最後一個索引t-if
/ t-elif
/ t-else
的使用
在使用QWeb時,它也提供基本的判斷式,以下式範例:
<template id='libaray_report'>
<t t-call ='web.html_container'>
<t t-foreach='library_book' t-as='doc'>
<t t-call='external_layout'>
<div class='page'>
<t t-if= ' book.name ' == 'Apple Tree'>
<p> Yes,this is the book Apple Tree</p>
</t>
<t t-elif ='book.name' =='Apple Tree V2'>
<p> No,this is the book Apple Tree version 2</p>
</t>
<t t-else ="">
<p>No ,this is not the book Apple Tree</p>
<p>This is <span t-field="book.name"/></p>
</t>
</div>
</t>
</t>
</t>
</template>
比較特別要注意的是在t-else
中會發現,必須使其為空,t-else
才會觸發。
t-foreach
、t-as
的使用
同時需要使用for loop我們也可以使用 t-foreach
以下式使用的範例:
<template id='libaray_report'>
<t t-call ='web.html_container'>
<t t-foreach='library_book' t-as='doc'>
<t t-call='external_layout'>
<div class='page'>
<t t-foreach ="[1,2,3,4,5,6,7,8,9]" t-as='rct'>
<h1>t-ecs = 'rct'</h1>
</t>
</div>
</t>
</t>
</t>
</template>
其實<t t-foreach='library_book' t-as='doc'>
與python for loopfor doc in library_book
是一樣的意思
t-set
、t-value
的使用方法t-set
、t-value
的功能是設置變量的值:
<template id='libaray_report'>
<t t-call ='web.html_container'>
<t t-foreach='library_book' t-as='doc'>
<t t-call='external_layout'>
<div class='page'>
<t t-set = 'a' t-value='1234'/>
<t t-ecs='a'/>
<t t-set = 'a' t-value='WebLearns'/>
<t t-ecs='a'/>
<t t-set = 'a' t-value='doc.name'/>
<p t-ecs = 'a' />
</t>
<t t-set = 'abc' t-value='0'/>
<t t-foreach = 'doc.book_id.book_list' t-as='rct'
<t t-set = 'abc' t-value = 'abc+1'/>
</t>
<p t-ecs = 'abc'/>
</div>
</t>
</t>
</t>
</template>
t-call
的使用方法
使用 t-call
可以將一個模板嵌套到另一個模板中,同時可以將目前模板的上下文傳遞給被呼叫的模板:
<template id='libaray_report'>
<t t-call ='web.html_container'>
<t t-foreach='library_book' t-as='doc'>
<t t-call='external_layout'>
<div class='page'>
<h1>Hellow</h1>
</div>
</t>
</t>
</t>
</template>